package com.cskaoyan.javase.object._6clone.string;
/**
 * String在类中只所以不需要做深度克隆
 * 原因是String类的对象是不可变对象
 *
 * 不可变对象
 * 某个对象一旦被创建，除非销毁它
 * 否者对象的状态永远不可改变，这种对象就是不可变对象。
 * 但是还要注意不可变对象的状态不可变，是有具体要求的，包括：
 *      1.对象中的基本数据类型成员变量的取值不可变。
 *      2.对象中的引用数据类型成员变量状态不可变：
 *          a.该引用不能指向新的对象。
 *          b.该引用指向的对象状态也不可变。
 *
 * 对于String字符串来说,因为它的对象不可变
 * 所以只要用String引用修改字符串内容,都不是修改对象的状态
 * 而是指向新对象
 *
 *
 * @since 21:19
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) throws CloneNotSupportedException {
        String str = "hello world!";
        str = "666!";

        Student s = new Student("周杰伦");
        Student cloneStu = s.clone();
        s.name = "昆凌";
        System.out.println(cloneStu.name);
    }
}
class Student implements Cloneable{
    String name;

    @Override
    protected Student clone() throws CloneNotSupportedException {
        return (Student) super.clone();
    }

    public Student(String name) {
        this.name = name;
    }
}
